package com.yidu.ladder.util;

import java.util.HashMap;
import java.util.Map;


/**
 * 地址解析器
 * @author bamboo
 *
 */
public class AddressUtil {
	
	public static void main(String[] args) {
		String address = "湖南省 长沙市 雨花区 香樟路110一度教育";
		Map<String, Object> map = AddressUtil.separateAddress(address);
		// 省
		String province = map.get("province").toString();
		// 市
		String city = map.get("city").toString();
		// 县
		String district = map.get("district").toString();
		String upperAddress = AddressUtil.upperAddress(province, city, district);
		System.out.println(upperAddress);
	}
	
	/**
	 * 将地址截取为省市县街道格式
	 * @param address 地址
	 * @return 省市县街道参数
	 */
	public static Map<String, Object> separateAddress(String address) {
		//获得省
		String province = address.substring(0, address.indexOf(" "));
		//获得街道
		String keyword = address.substring(address.lastIndexOf(" ")+1);
		//获得市和区
		String cityAndDistrict = address.substring(address.indexOf(" ")+1,address.lastIndexOf(" "));
		//获得市
		String city = cityAndDistrict.substring(0,cityAndDistrict.indexOf(" "));
		//获得县
		String district = cityAndDistrict.substring(cityAndDistrict.indexOf(" ")+1);
		//创建map对象
		Map<String,Object> paramMap = new HashMap<String,Object>();
		//将省存放在map中
		paramMap.put("province", province);
		//将市存放在map中
		paramMap.put("city", city);
		//将县存放在map中
		paramMap.put("district", district);
		//将街道存放在map中
		paramMap.put("keyword", keyword);
		//返回map集合
		return paramMap;
	}
	
	/**
	 * 得到省市县获得字符串编码
	 * @param province 省
	 * @param city 市
	 * @param district 县
	 * @return 地区简码
	 */
	public static String upperAddress(String province,String city,String district) {
		//调用PinYin4j工具类的方法来获取省的首字母大写
        String[] provinces = PinYin4jUtils.getHeadByString(province);
        //调用PinYin4j工具类的方法来获取市的首字母大写
        String[] citys = PinYin4jUtils.getHeadByString(city);
        //调用PinYin4j工具类的方法来获取区(县)的首字母大写
        String[] districts = PinYin4jUtils.getHeadByString(district);
        
      //定义空的字符串来接收省的简码
        String shortCodeP = "";
        //使用普通for循环来获取省的字母
        for(int i=0;i<provinces.length-1;i++){
        	//将处理过后的省简码放入到空的字符串中
        	shortCodeP = shortCodeP+provinces[i];
        }
        //定义空的字符串来接收市的简码
        String shortCodeC = "";
        //使用普通for循环来获取市的字母
        for(int i=0;i<citys.length-1;i++){
        	//将处理过后的市简码放入到空的字符串中
        	shortCodeC = shortCodeC+citys[i];
        }
        //定义空的字符串来接收区(县)的简码
        String shortCodeD = "";
        //使用普通for循环来获取区(县)的字母
        for(int i=0;i<districts.length-1;i++){
        	//将处理过后的区(县)简码放入到空的字符串中
        	shortCodeD = shortCodeD+districts[i];
        }
        //将省市县编码合成城市简码
        String code = shortCodeP+shortCodeC+shortCodeD;
        //返回地区编码
		return code;
		
	}
	
}
